home *** CD-ROM | disk | FTP | other *** search
- Subject: Re: MiNTOS Distribution World Wide Web page now available.
- Date: Sat, 21 May 94 1:22:24 CDT
- From: Juergen Lock <nox@jelal.north.de>
- In-Reply-To: <9405181403.AA15282@telle.dmi.stevens-tech.edu>; from "Scott Kolodzieski" at May 18, 94 10:03 am
- Message-Id: <9405202322.AA00661@jelal.north.de>
-
- Scott Kolodzieski writes:
- > Hello all,
- >
- > I have a TT 4+16, and just set up MiNTOS on it. I saw some some chatter
- > recently about people starting gem.sys from the MultiTOS distribution up
- > after they login as root.
- >
- > When I login as root and start MultiTOS, it come up fine and appears
- > to work as long as I don't touck the keyboard. I can
- > drag/drop/launch/copy/move files and the like. If I open TOSWIN, and
- > begin typing, or a com program and begin typing, the machine takes 4
- > or 5 keystrokes (correctly echoing) then stops accepting input from
- > the keyboard. a quik cntrl+alt+f1 shows MiNT(v1.10 + net patches) is
- > still alive as the new Minix FS update is being called (I assume by
- > addroottimeout()) and the mouse moves, but I cannot type or select
- > anything with the mouse. Odd huh?
-
- sounds like the old GEM SIGTT* hang... i.e. GEM does some strange
- things with its tty that make it end up in state `stop'. (verify with
- ctrl-alt-f6...)
-
- heres a start-GEM thing i made for virtual consoles, the hack is to
- reset /dev/consoles process group to 0 like if it was closed... :/
-
- /* execgem -- exec `old' GEM (exec_os) or a gem.sys (-DINITPRG)
- make sure we're on console, zero its pgroup to reduce GEM SIGTTIN/OU
- problems (don't ask), exec. INITPRG can also be a script so you
- can create an account `gem' in /etc/passwd if you want with this
- as loginshell and put setup things in the script. (last line execs
- the real gem.)
-
- BUGS: still no way to leave GEM & free all its memory etc. other
- than reboot. :-( if someone manages to shut down GEM and later
- restart it without spectacular crashes and losing memory _please_
- tell us how...
- */
-
- #include <stdio.h>
- #include <string.h>
- #include <stat.h>
- #include <fcntl.h>
- #include <ioctl.h>
- #include <unistd.h>
- #include <errno.h>
- #include <mintbind.h>
- #include <basepage.h>
- #include <st-out.h>
-
- #ifdef INITPRG
- #define init_prg INITPRG
- #define init_tail "\0"
- #define init_env 0L
- #else
- #define init_prg 0L
- #define init_tail ""
- #define init_env 0L
- #endif
-
- #define EXEC_OS 0x4feL
-
- /* define how to call functions with stack parameter passing */
- #ifdef __TURBOC__
- #define ARGS_ON_STACK cdecl
- #else
- #define ARGS_ON_STACK
- #endif
-
- #ifndef P_
- # ifdef __STDC__
- # define P_(x) x
- # else
- # define P_(x) ()
- # endif
- #endif
-
- /* not yet in st-out.h... */
- #ifndef F_PROT_P
- #define F_PROT_P 0x00 /* no read or write */
- #define F_PROT_G 0x10 /* any access OK */
- #define F_PROT_S 0x20 /* any super access OK */
- #define F_PROT_PR 0x30 /* any read OK, no write */
- #define F_PROT_I 0x40 /* invalid page */
- #endif
-
- int
- main(argc, argv)
- int argc;
- char **argv;
- {
- long stack;
- extern int __mint;
-
- if (__mint) {
- struct stat sb, st;
- BASEPAGE *bp;
- long pgrp, r;
- char tmp[0x100];
-
- if (Fcntl(-1, &pgrp, TIOCGPGRP) ||
- Fcntl(-1, &sb, FSTAT) ||
- (Fxattr(0, "u:\\dev\\ttyv0", &st) &&
- Fxattr(0, "u:\\dev\\vt00", &st) &&
- Fxattr(0, "u:\\dev\\console", &st)) ||
- ((st.st_dev != sb.st_dev || st.st_ino != sb.st_ino) &&
- (Fxattr(0, "u:\\dev\\fasttext", &st) ||
- st.st_dev != sb.st_dev || st.st_ino != sb.st_ino))) {
-
- Cconws ("Hey GEM is not X! :) console only...\r\n");
- return 1;
- }
-
- /* just to be sure... */
- (void) Fclose (0);
- (void) Fcntl(-1, 0L, F_DUPFD);
- (void) Fclose (1);
- (void) Fcntl(-1, 0L, F_DUPFD);
- (void) Fclose (2);
- (void) Fcntl(-1, 0L, F_DUPFD);
-
- /* `turn off' job control on /dev/console, GEM seems to have
- problems with it... apparently even multitos :-( */
- r = 0;
- (void) Fcntl(0, &r, TIOCSPGRP);
-
- stack = Super (0L);
- if (init_prg) {
- /* not Pexec so init_prg gets ARGV and can be a script.
- */
- execl (init_prg, init_prg, (char *)0);
- if (errno == ENOEXEC || errno == ENOENT)
- execl ("/bin/sh", "/bin/sh", init_prg, (char *)0);
- r = errno;
- } else {
- bp = (BASEPAGE *)Pexec(7,
- (char *)((long)F_FASTLOAD | F_ALTLOAD | F_ALTALLOC | F_PROT_S),
- (char *)"\0", init_env);
- bp->p_tbase = *((char **) EXEC_OS );
- r = -Pexec(206, (char *)"GEM", bp, 0L);
- }
- Super (stack);
- sprintf (tmp, "exec %s failed: %s (%d)\r\n",
- init_prg ? init_prg : "GEM", strerror (r), (int) r);
- (void) Fcntl(0, &pgrp, TIOCSPGRP);
- Cconws (tmp);
- return r;
- } else {
- register void ARGS_ON_STACK (*f) P_((long));
-
- /* no MiNT -> just jump thru exec_os... */
- stack = Super (0L);
- f = (void ARGS_ON_STACK (*) P_((long))) *((long *)EXEC_OS);
- Super (stack);
-
- (*f)((long) _base);
- /*NOTREACHED*/
- return 0;
- }
- }
- >
- > Any tips would be appreciated.
- >
- >
- > cheers,
- > scott.
-
- hope this helps, cheers
- Juergen
- --
- J"urgen Lock / nox@jelal.north.de / UUCP: ..!uunet!unido!uniol!jelal!nox
- ...ohne Gewehr
- PGP public key fingerprint = 8A 18 58 54 03 7B FC 12 1F 8B 63 C7 19 27 CF DA
-